<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Shape datatype | Elasticsearch Guide [7.7] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch Guide [7.7]">
<link rel="up" href="mapping-types.html" title="Field datatypes">
<link rel="prev" href="token-count.html" title="Token count datatype">
<link rel="next" href="constant-keyword.html" title="Constant keyword datatype">
<meta name="DC.type" content="Learn/Docs/Elasticsearch/Reference/7.7">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="7.7">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<strong>IMPORTANT</strong>: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
<a href="../current/index.html">current release documentation</a>.
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch Guide [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="mapping.html">Mapping</a></span>
»
<span class="breadcrumb-link"><a href="mapping-types.html">Field datatypes</a></span>
»
<span class="breadcrumb-node">Shape datatype</span>
</div>
<div class="navheader">
<span class="prev">
<a href="token-count.html">« Token count datatype</a>
</span>
<span class="next">
<a href="constant-keyword.html">Constant keyword datatype »</a>
</span>
</div>
<div class="section xpack">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="shape"></a>Shape datatype<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a><a class="xpack_tag" href="/subscriptions"></a>
</h2>
</div></div></div>

<p>The <code class="literal">shape</code> datatype facilitates the indexing of and searching
with arbitrary <code class="literal">x, y</code> cartesian shapes such as rectangles and polygons. It can be
used to index and query geometries whose coordinates fall in a 2-dimensional planar
coordinate system.</p>
<p>You can query documents using this type using
<a class="xref" href="query-dsl-shape-query.html" title="Shape query">shape Query</a>.</p>
<h4>
<a id="shape-mapping-options"></a>Mapping Options<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h4>
<p>Like the <a class="xref" href="geo-shape.html" title="Geo-shape datatype">geo_shape</a> field type, the <code class="literal">shape</code> field mapping maps
<a href="http://www.geojson.org" class="ulink" target="_top">GeoJSON</a> or <a href="http://docs.opengeospatial.org/is/12-063r5/12-063r5.html" class="ulink" target="_top">Well-Known Text</a>
(WKT) geometry objects to the shape type. To enable it, users must explicitly map
fields to the shape type.</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
<col class="col_3">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">Option</th>
<th align="left" valign="top">Description</th>
<th align="left" valign="top">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">orientation</code></p></td>
<td align="left" valign="top"><p>Optionally define how to interpret vertex order for
polygons / multipolygons.  This parameter defines one of two coordinate
system rules (Right-hand or Left-hand) each of which can be specified in three
different ways. 1. Right-hand rule: <code class="literal">right</code>, <code class="literal">ccw</code>, <code class="literal">counterclockwise</code>,
2. Left-hand rule: <code class="literal">left</code>, <code class="literal">cw</code>, <code class="literal">clockwise</code>. The default orientation
(<code class="literal">counterclockwise</code>) complies with the OGC standard which defines
outer ring vertices in counterclockwise order with inner ring(s) vertices (holes)
in clockwise order. Setting this parameter in the geo_shape mapping explicitly
sets vertex order for the coordinate list of a geo_shape field but can be
overridden in each individual GeoJSON or WKT document.</p></td>
<td align="left" valign="top"><p><code class="literal">ccw</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">ignore_malformed</code></p></td>
<td align="left" valign="top"><p>If true, malformed GeoJSON or WKT shapes are ignored. If
false (default), malformed GeoJSON and WKT shapes throw an exception and reject the
entire document.</p></td>
<td align="left" valign="top"><p><code class="literal">false</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">ignore_z_value</code></p></td>
<td align="left" valign="top"><p>If <code class="literal">true</code> (default) three dimension points will be accepted (stored in source)
but only latitude and longitude values will be indexed; the third dimension is ignored. If <code class="literal">false</code>,
geo-points containing any more than latitude and longitude (two dimensions) values throw an exception
and reject the whole document.</p></td>
<td align="left" valign="top"><p><code class="literal">true</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">coerce</code></p></td>
<td align="left" valign="top"><p>If <code class="literal">true</code> unclosed linear rings in polygons will be automatically closed.</p></td>
<td align="left" valign="top"><p><code class="literal">false</code></p></td>
</tr>
</tbody>
</table>
</div>
<h4>
<a id="shape-indexing-approach"></a>Indexing approach<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h4>
<p>Like <code class="literal">geo_shape</code>, the <code class="literal">shape</code> field type is indexed by decomposing geometries into
a triangular mesh and indexing each triangle as a 7 dimension point in a BKD tree.
The coordinates provided to the indexer are single precision floating point values so
the field guarantees the same accuracy provided by the java virtual machine (typically
<code class="literal">1E-38</code>). For polygons/multi-polygons the performance of the tessellator primarily
depends on the number of vertices that define the geometry.</p>
<p><span class="strong strong"><strong>IMPORTANT NOTES</strong></span></p>
<p><code class="literal">CONTAINS</code> relation query - <code class="literal">shape</code> queries with <code class="literal">relation</code> defined as <code class="literal">contains</code> are supported
for indices created with ElasticSearch 7.5.0 or higher.</p>
<h5>
<a id="_example_6"></a>Example<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h5>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT /example
{
    "mappings": {
        "properties": {
            "geometry": {
                "type": "shape"
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/706.console"></div>
<p>This mapping definition maps the geometry field to the shape type. The indexer uses single
precision floats for the vertex values so accuracy is guaranteed to the same precision as
<code class="literal">float</code> values provided by the java virtual machine approximately (typically 1E-38).</p>
<h4>
<a id="shape-input-structure"></a>Input Structure<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h4>
<p>Shapes can be represented using either the <a href="http://www.geojson.org" class="ulink" target="_top">GeoJSON</a>
or <a href="http://docs.opengeospatial.org/is/12-063r5/12-063r5.html" class="ulink" target="_top">Well-Known Text</a>
(WKT) format. The following table provides a mapping of GeoJSON and WKT
to Elasticsearch types:</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
<col class="col_3">
<col class="col_4">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">GeoJSON Type</th>
<th align="left" valign="top">WKT Type</th>
<th align="left" valign="top">Elasticsearch Type</th>
<th align="left" valign="top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">Point</code></p></td>
<td align="left" valign="top"><p><code class="literal">POINT</code></p></td>
<td align="left" valign="top"><p><code class="literal">point</code></p></td>
<td align="left" valign="top"><p>A single <code class="literal">x, y</code> coordinate.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">LineString</code></p></td>
<td align="left" valign="top"><p><code class="literal">LINESTRING</code></p></td>
<td align="left" valign="top"><p><code class="literal">linestring</code></p></td>
<td align="left" valign="top"><p>An arbitrary line given two or more points.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">Polygon</code></p></td>
<td align="left" valign="top"><p><code class="literal">POLYGON</code></p></td>
<td align="left" valign="top"><p><code class="literal">polygon</code></p></td>
<td align="left" valign="top"><p>A <em>closed</em> polygon whose first and last point
must match, thus requiring <code class="literal">n + 1</code> vertices to create an <code class="literal">n</code>-sided
polygon and a minimum of <code class="literal">4</code> vertices.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">MultiPoint</code></p></td>
<td align="left" valign="top"><p><code class="literal">MULTIPOINT</code></p></td>
<td align="left" valign="top"><p><code class="literal">multipoint</code></p></td>
<td align="left" valign="top"><p>An array of unconnected, but likely related
points.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">MultiLineString</code></p></td>
<td align="left" valign="top"><p><code class="literal">MULTILINESTRING</code></p></td>
<td align="left" valign="top"><p><code class="literal">multilinestring</code></p></td>
<td align="left" valign="top"><p>An array of separate linestrings.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">MultiPolygon</code></p></td>
<td align="left" valign="top"><p><code class="literal">MULTIPOLYGON</code></p></td>
<td align="left" valign="top"><p><code class="literal">multipolygon</code></p></td>
<td align="left" valign="top"><p>An array of separate polygons.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">GeometryCollection</code></p></td>
<td align="left" valign="top"><p><code class="literal">GEOMETRYCOLLECTION</code></p></td>
<td align="left" valign="top"><p><code class="literal">geometrycollection</code></p></td>
<td align="left" valign="top"><p>A shape collection similar to the
<code class="literal">multi*</code> shapes except that multiple types can coexist (e.g., a Point and a LineString).</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">N/A</code></p></td>
<td align="left" valign="top"><p><code class="literal">BBOX</code></p></td>
<td align="left" valign="top"><p><code class="literal">envelope</code></p></td>
<td align="left" valign="top"><p>A bounding rectangle, or envelope, specified by
specifying only the top left and bottom right points.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>For all types, both the inner <code class="literal">type</code> and <code class="literal">coordinates</code> fields are required.</p>
<p>In GeoJSON and WKT, and therefore Elasticsearch, the correct <span class="strong strong"><strong>coordinate order is (X, Y)</strong></span>
within coordinate arrays. This differs from many Geospatial APIs (e.g., <code class="literal">geo_shape</code>) that
typically use the colloquial latitude, longitude (Y, X) ordering.</p>
</div>
</div>
<h5>
<a id="point"></a><a href="http://geojson.org/geojson-spec.html#id2" class="ulink" target="_top">Point</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h5>
<p>A point is a single coordinate in cartesian <code class="literal">x, y</code> space. It may represent the
location of an item of interest in a virtual world or projected space. The
following is an example of a point in GeoJSON.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "point",
        "coordinates" : [-377.03653, 389.897676]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/707.console"></div>
<p>The following is an example of a point in WKT:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "POINT (-377.03653 389.897676)"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/708.console"></div>
<h5>
<a id="linestring"></a><a href="http://geojson.org/geojson-spec.html#id3" class="ulink" target="_top">LineString</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h5>
<p>A <code class="literal">linestring</code> defined by an array of two or more positions. By
specifying only two points, the <code class="literal">linestring</code> will represent a straight
line.  Specifying more than two points creates an arbitrary path. The
following is an example of a LineString in GeoJSON.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "linestring",
        "coordinates" : [[-377.03653, 389.897676], [-377.009051, 389.889939]]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/709.console"></div>
<p>The following is an example of a LineString in WKT:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "LINESTRING (-377.03653 389.897676, -377.009051 389.889939)"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/710.console"></div>
<h5>
<a id="polygon"></a><a href="http://www.geojson.org/geojson-spec.html#id4" class="ulink" target="_top">Polygon</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h5>
<p>A polygon is defined by a list of a list of points. The first and last
points in each (outer) list must be the same (the polygon must be
closed). The following is an example of a Polygon in GeoJSON.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "polygon",
        "coordinates" : [
            [ [1000.0, -1001.0], [1001.0, -1001.0], [1001.0, -1000.0], [1000.0, -1000.0], [1000.0, -1001.0] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/711.console"></div>
<p>The following is an example of a Polygon in WKT:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/712.console"></div>
<p>The first array represents the outer boundary of the polygon, the other
arrays represent the interior shapes ("holes"). The following is a GeoJSON example
of a polygon with a hole:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "polygon",
        "coordinates" : [
            [ [1000.0, -1001.0], [1001.0, -1001.0], [1001.0, -1000.0], [1000.0, -1000.0], [1000.0, -1001.0] ],
            [ [1000.2, -1001.2], [1000.8, -1001.2], [1000.8, -1001.8], [1000.2, -1001.8], [1000.2, -1001.2] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/713.console"></div>
<p>The following is an example of a Polygon with a hole in WKT:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/714.console"></div>
<p><span class="strong strong"><strong>IMPORTANT NOTE:</strong></span> WKT does not enforce a specific order for vertices.
<a href="https://tools.ietf.org/html/rfc7946#section-3.1.6" class="ulink" target="_top">GeoJSON</a> mandates that the
outer polygon must be counterclockwise and interior shapes must be clockwise,
which agrees with the Open Geospatial Consortium (OGC)
<a href="http://www.opengeospatial.org/standards/sfa" class="ulink" target="_top">Simple Feature Access</a>
specification for vertex ordering.</p>
<p>By default Elasticsearch expects vertices in counterclockwise (right hand rule)
order. If data is provided in clockwise order (left hand rule) the user can change
the <code class="literal">orientation</code> parameter either in the field mapping, or as a parameter provided
with the document.</p>
<p>The following is an example of overriding the <code class="literal">orientation</code> parameters on a document:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "polygon",
        "orientation" : "clockwise",
        "coordinates" : [
            [ [1000.0, 1000.0], [1000.0, 1001.0], [1001.0, 1001.0], [1001.0, 1000.0], [1000.0, 1000.0] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/715.console"></div>
<h5>
<a id="multipoint"></a><a href="http://www.geojson.org/geojson-spec.html#id5" class="ulink" target="_top">MultiPoint</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h5>
<p>The following is an example of a list of geojson points:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "multipoint",
        "coordinates" : [
            [1002.0, 1002.0], [1003.0, 2000.0]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/716.console"></div>
<p>The following is an example of a list of WKT points:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/717.console"></div>
<h5>
<a id="multilinestring"></a><a href="http://www.geojson.org/geojson-spec.html#id6" class="ulink" target="_top">MultiLineString</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h5>
<p>The following is an example of a list of geojson linestrings:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "multilinestring",
        "coordinates" : [
            [ [1002.0, 200.0], [1003.0, 200.0], [1003.0, 300.0], [1002.0, 300.0] ],
            [ [1000.0, 100.0], [1001.0, 100.0], [1001.0, 100.0], [1000.0, 100.0] ],
            [ [1000.2, 100.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/718.console"></div>
<p>The following is an example of a list of WKT linestrings:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/719.console"></div>
<h5>
<a id="multipolygon"></a><a href="http://www.geojson.org/geojson-spec.html#id7" class="ulink" target="_top">MultiPolygon</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h5>
<p>The following is an example of a list of geojson polygons (second polygon contains a hole):</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "multipolygon",
        "coordinates" : [
            [ [[1002.0, 200.0], [1003.0, 200.0], [1003.0, 300.0], [1002.0, 300.0], [1002.0, 200.0]] ],
            [ [[1000.0, 200.0], [1001.0, 100.0], [1001.0, 100.0], [1000.0, 100.0], [1000.0, 100.0]],
              [[1000.2, 200.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8], [1000.2, 100.2]] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/720.console"></div>
<p>The following is an example of a list of WKT polygons (second polygon contains a hole):</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "MULTIPOLYGON (((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0, 102.0 200.0)), ((1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0, 1000.0 100.0), (1000.2 100.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8, 1000.2 100.2)))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/721.console"></div>
<h5>
<a id="geometry_collection"></a><a href="http://geojson.org/geojson-spec.html#geometrycollection" class="ulink" target="_top">Geometry Collection</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h5>
<p>The following is an example of a collection of geojson geometry objects:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type": "geometrycollection",
        "geometries": [
            {
                "type": "point",
                "coordinates": [1000.0, 100.0]
            },
            {
                "type": "linestring",
                "coordinates": [ [1001.0, 100.0], [1002.0, 100.0] ]
            }
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/722.console"></div>
<p>The following is an example of a collection of WKT geometry objects:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/723.console"></div>
<h5>
<a id="_envelope_2"></a>Envelope<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h5>
<p>Elasticsearch supports an <code class="literal">envelope</code> type, which consists of coordinates
for upper left and lower right points of the shape to represent a
bounding rectangle in the format <code class="literal">[[minX, maxY], [maxX, minY]]</code>:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "envelope",
        "coordinates" : [ [1000.0, 100.0], [1001.0, 100.0] ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/724.console"></div>
<p>The following is an example of an envelope using the WKT BBOX format:</p>
<p><span class="strong strong"><strong>NOTE:</strong></span> WKT specification expects the following order: minLon, maxLon, maxLat, minLat.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "BBOX (1000.0, 1002.0, 2000.0, 1000.0)"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/725.console"></div>
<h4>
<a id="_sorting_and_retrieving_index_shapes_2"></a>Sorting and Retrieving index Shapes<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/shape.asciidoc">edit</a>
</h4>
<p>Due to the complex input structure and index representation of shapes,
it is not currently possible to sort shapes or retrieve their fields
directly. The <code class="literal">shape</code> value is only retrievable through the <code class="literal">_source</code>
field.</p>
</div>
<div class="navfooter">
<span class="prev">
<a href="token-count.html">« Token count datatype</a>
</span>
<span class="next">
<a href="constant-keyword.html">Constant keyword datatype »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
